package com.juc.volatiles;

/**
 * @Author Zan
 * @Create 2024/5/9 21:25
 * @ClassName : UseVolatileDemo
 * @Description : TODO 请用一句话描述该类的功能
 */
public class UseVolatileDemo {
    /**
     * 使用：当读远多于写，结合使用内部锁和 volatile 变量来减少同步的开销
     * 理由：利用volatile保证读取操作的可见性；利用synchronized保证复合操作的原子性
     */
    public class Counter {
        private volatile int value;

        public int getValue() {
            return value;   //利用volatile保证读取操作的可见性
        }

        public synchronized int increment() {
            return value++; //利用synchronized保证复合操作的原子性
        }
    }
}
